from machine import Pin,SPI
import machine
import utime
from wifitime  import *
lcdRS=Pin(23,Pin.OUT)
lcdRST=Pin(22,Pin.OUT,Pin.PULL_UP)
hspi = SPI(1, 20000000, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
led=Pin(2,Pin.OUT)

def lcdData(da):
    lcdRS.value(1)
    #utime.sleep_us(1)
    hspi.write(da)

def lcdCmd(cmd):
    lcdRS.value(0)
    hspi.write(cmd)

def lcdinit():
    lcdRST.value(0)
    utime.sleep_ms(1)
    lcdRST.value(1)
    lcdCmd(b'\x30\x94') #退出睡眠模式
    #lcdCmd(b'\x31\x7b') #升压倍数 ？\x7b
    #lcdData(b"\x9f")
    lcdCmd(b"\x32") #偏压比设置
    lcdData(b"\x00\x01\x02")

    #lcdCmd(b"\x31\xf2")#温度范围设置
    #lcdData(b"\x1e\x28\x32")
    '''
    lcdCmd(b"\x20") #灰度级设置
    lcdData(b"\x01\x03\x05\x07\x09\x0b\x0d\x10\x11\x13\x15\x17\x19\x1b\x1d\x1f")
    '''
    lcdCmd(b"\x30\x75") #页地址设置 #？\x30\x75 
    lcdData(b"\x00\x14")
    lcdCmd(b"\x15") #列地址设置
    lcdData(b"\x00\xff")

    lcdCmd(b"\xbc") #行列扫描方向
    lcdData(b"\x00") # \x00\xa6 ?\xa6

    lcdCmd(b"\xca") #显示控制
    lcdData(b"\x00\x7f\x20") #设置CL驱动频率：CLD=0 ， 点空比：Duty=128，帧周期

    lcdCmd(b"\xf0") #显示模式设置
    lcdData(b"\x10") #黑白模式

    lcdCmd(b"\x81") #设置对比度
    lcdData(b"\x39\x04")

    lcdCmd(b"\x20") #电源控制
    lcdData(b"\x0b") # VB VF VR =1

    utime.sleep_us(100)
    lcdCmd(b"\xaf") #显示
    lcdCmd(b"\xc0") #数据格式选择 D0->D7


def lcdAddress(x,y,x_total,y_total):
    lcdCmd(b"\x15")
    lcdData(x.to_bytes(1,"big"))
    lcdData((x+x_total-1).to_bytes(1,"big"))
    lcdCmd(b"\x30\x75")
    lcdData(y.to_bytes(1,"big"))
    lcdData((y+y_total-1).to_bytes(1,"big"))
    lcdCmd(b"\x30\x5c")

def lcdClean():
    buf=bytes()
    lcdAddress(0,0,256,16)
    for i in range(0,256*16):
        buf=buf+b"\x00"
    lcdData(buf)

#lcdData(buf)


def fontdata16_32(n):
    data=[
b"\x00\x00\x00\x00\x00\x01\x03\x02\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x0F\x7F\xF0\x80\x00\x00\x00\x00\x80\xE0\x7F\x0F\x00\x00",
b"\x00\x00\xFC\xFF\x03\x00\x00\x00\x00\x00\x00\x01\xFF\xFC\x00\x00\x00\x00\x00\x80\xC0\x60\x30\x10\x10\x10\x60\xC0\x80\x00\x00\x00",#00
b"\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x80\x80\xFF\xFF\x00\x00\x00\x00\x00\x00\x00",
b"\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x10\x10\x30\xF0\xF0\x30\x10\x10\x10\x00\x00\x00",#11
b"\x00\x00\x00\x00\x01\x02\x02\x02\x02\x02\x03\x01\x01\x00\x00\x00\x00\x00\x78\x98\x00\x00\x00\x00\x00\x00\x00\x83\xFF\x7C\x00\x00",
b"\x00\x00\x00\x00\x01\x02\x0C\x18\x30\x60\xC0\x80\x00\x03\x00\x00\x00\x00\x70\xB0\x30\x30\x30\x30\x30\x30\x30\x30\x70\xC0\x00\x00",#22
b"\x00\x00\x00\x01\x01\x02\x02\x02\x02\x03\x01\x00\x00\x00\x00\x00\x00\x00\xF0\xF0\x00\x00\x00\x00\x00\x01\x83\xFE\x7C\x00\x00\x00",
b"\x00\x00\x03\x03\x00\x00\x80\x80\x80\xC0\x40\x60\x3F\x0F\x00\x00\x00\x00\xC0\xE0\x20\x10\x10\x10\x10\x10\x20\x60\xC0\x00\x00\x00",#33
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x06\x08\x30\xC0\xFF\xFF\x00\x00\x00\x00\x00",
b"\x00\x0C\x34\x64\x84\x04\x04\x04\x04\xFF\xFF\x04\x04\x04\x00\x00\x00\x00\x00\x00\x00\x00\x10\x10\x10\xF0\xF0\x10\x10\x10\x00\x00",#44
b"\x00\x00\x00\x00\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x00\x00\x00\x00\x00\xFF\x00\x01\x02\x02\x02\x02\x03\x01\x00\x00\x00\x00",
b"\x00\x00\x03\xC3\x80\x00\x00\x00\x00\x00\x00\x80\xFF\x3F\x00\x00\x00\x00\xC0\x20\x20\x10\x10\x10\x10\x10\x20\xE0\xC0\x00\x00\x00",#55
b"\x00\x00\x00\x00\x00\x01\x01\x02\x02\x02\x02\x01\x01\x00\x00\x00\x00\x00\x07\x3F\xE0\x81\x03\x02\x02\x02\x03\xC1\xC0\x00\x00\x00",
b"\x00\x00\xFE\xFF\xC1\x00\x00\x00\x00\x00\x00\x80\xFF\x3F\x00\x00\x00\x00\x00\x80\xE0\x60\x30\x10\x10\x10\x30\x60\xC0\x00\x00\x00",#66
b"\x00\x00\x00\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x00\x00\x00\x00\x70\xC0\x00\x00\x00\x00\x00\x07\x18\x60\x80\x00\x00\x00",
b"\x00\x00\x00\x00\x00\x00\x03\x3F\xC0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0\xF0\x00\x00\x00\x00\x00\x00\x00\x00",#77
b"\x00\x00\x00\x00\x01\x03\x02\x02\x02\x02\x03\x01\x00\x00\x00\x00\x00\x00\x7C\xFE\x8F\x03\x03\x01\x00\x00\x01\x82\xFE\x78\x00\x00",
b"\x00\x0F\x3F\x70\x40\x80\x80\x80\xC0\xE0\x70\x78\x3F\x0F\x00\x00\x00\x80\xC0\x60\x20\x10\x10\x10\x10\x10\x20\x60\xC0\x80\x00\x00",#88
b"\x00\x00\x00\x01\x01\x02\x02\x02\x02\x02\x01\x00\x00\x00\x00\x00\x00\x3F\xFF\xC0\x00\x00\x00\x00\x00\x00\x00\xC0\x7F\x1F\x00\x00",
b"\x00\x80\xC0\xE0\x30\x10\x10\x10\x10\x20\x60\x87\xFE\xF8\x00\x00\x00\x00\xE0\xE0\x10\x10\x10\x10\x30\x60\xC0\x80\x00\x00\x00\x00",#99
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x07\x07\x03\x00\x00\x00\x00\x00\x00",
b"\x00\x00\x00\x00\x00\x00\x00\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xF0\xF0\x60\x00\x00\x00\x00\x00\x00",#:10
]

    return data[n*2] + data[n*2+1]

lcdinit()
lcdClean()
lcdAddress(0,0,16,4)
lcdData(fontdata16_32(0))
'''


lcdClean()
lcdAddress(0,0,16,4)
lcdData(fontdata16_32(0))

connectWifi()

ntptimeflag=False

if sync_ntp() :
    print("gettime successful")
    lcdData(fontdata16_32(1))
    ntptimeflag=True
else:
    print("gettime failed")
    lcdData(fontdata16_32(0))
    ntptimeflag=False

rtc = RTC()
t=rtc.datetime()
lcdAddress(16*2,0,16,4)
lcdData(fontdata16_32(10))
lcdAddress(16*5,0,16,4)
lcdData(fontdata16_32(10))


lcdAddress(16*7,0,16,4)
lcdData(fontdata16_32(int(t[6]%10)))
lcdAddress(16*6,0,16,4)
lcdData(fontdata16_32(int(t[6]/10)))

lcdAddress(16*4,0,16,4)
lcdData(fontdata16_32(int(t[5]%10)))
lcdAddress(16*3,0,16,4)
lcdData(fontdata16_32(int(t[5]/10)))

lcdAddress(16*1,0,16,4)
lcdData(fontdata16_32(int(t[4]%10)))
lcdAddress(16*0,0,16,4)
lcdData(fontdata16_32(int(t[4]/10)))


while True:
    t=rtc.datetime()
    print(t)
    print(t[7]/1000)
    if t[6]==0:
        if not ntptimeflag :
            if sync_ntp() :
                ntptimeflag=True
            else:
                ntptimeflag=False
        lcdAddress(16*7,0,16,4)
        lcdData(fontdata16_32(int(t[6]%10)))
        lcdAddress(16*6,0,16,4)
        lcdData(fontdata16_32(int(t[6]/10)))

        lcdAddress(16*4,0,16,4)
        lcdData(fontdata16_32(int(t[5]%10)))
        lcdAddress(16*3,0,16,4)
        lcdData(fontdata16_32(int(t[5]/10)))

        lcdAddress(16*1,0,16,4)
        lcdData(fontdata16_32(int(t[4]%10)))
        lcdAddress(16*0,0,16,4)
        lcdData(fontdata16_32(int(t[4]/10)))

    elif t[6]%10 ==0:
        lcdAddress(16*6,0,16,4)
        lcdData(fontdata16_32(int(t[6]/10)))
        lcdAddress(16*7,0,16,4)
        lcdData(fontdata16_32(int(t[6]%10)))
        
    else:
        lcdAddress(16*7,0,16,4)
        lcdData(fontdata16_32(int(t[6]%10)))
    t=rtc.datetime()
    utime.sleep_us(1000000-t[7])
    #machine.lightsleep(int((1000000-t[7])/1000))
    #machine.deepsleep(int((1000000-t[7])/1000))
    machine.idle()
'''